Welcome to pandas!

6.7 选择单行、单列、单值、多行多列

分层索引切片,就是通过切片DataFrame或者Series的分层索引达到选择数据的目的。分层索引的切片方式与单层索引切片完全相同,只是单层索引标签一般是标量值,而分层索引标签是由元组构成。

1、 选择单行

单行选择直接将分层索引的每层标签写入元组,返回结果是Series数据

2、 选择单列

单列选择将分层索引的每层标签写入元组,返回结果也是Series数据

3、选择单值

指定单行单列的交叉点是一个单值,也就是在loc中指定单行分层索引标与单列分层索引标签


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])

print (df)

返回:

大类 硬件 软件
中类 整机 配件 办公 编程
小类 PC 笔记本 CPU 主板 显卡 Excel Word Python
地区 部门 代号
上海 销售1部 A 2 7 3 2 9 66 9 55
B 12 5 45 15 12 24 13 41
销售2部 C 5 24 12 64 65 43 45 9
成都 销售1部 A 24 96 11 99 78 56 18 12
销售2部 B 68 12 58 11 44 59 24 49
上海 销售1部 A 99 55 22 18 31 66 56 78
B 23 34 13 42 45 99 67 60
销售2部 C 85 56 35 66 21 86 81 63
D 99 81 45 12 45 75 91 45

import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])

s1=df.loc[( "上海","销售1部","B" )]

s2=df.loc[:,( "硬件","配件","主板" )]

print (s1)

print ("--------------------------------")

print (s2)

返回:

大类 中类 小类
硬件 整机 PC 12
笔记本 5
配件 CPU 45
主板 15
显卡 12
办公 Excel 24
Word 13
编程 Python 41

Name: (上海, 销售1部, B), dtype: int64

--------------------------------


地区 部门 代号
上海 销售1部 A 2
B 15
销售2部 C 64
成都 销售1部 A 99
销售2部 B 11
北京 销售1部 A 18
B 42
销售2部 C 66
D 12

Name: (硬件, 配件, 主板), dtype: int64


import pandas as pd

df=pd.read_excel(r "D:\Pyobject2023\object\测试\素材\测试素材.多层索引区域选择.xlsx" , header =[ 0,1,2 ], index_col =[ 0,1,2 ])

df.sort_index(level=[ "地区","部门","代号" ], inplace = True )

df=df.loc[( "上海","销售1部","A" ):( "北京","销售1部","B" ),( "硬件","配件","主板" ):( "软件","编程","Python" )]

print (df)

大类 硬件 软件
中类 配件 办公 编程
小类 主板 显卡 Excel Word Python
地区 部门 代号
上海 销售1部 A 2 9 66 9 55
B 15 12 24 13 41
销售2部 C 64 65 43 45 9
北京 销售1部 A 18 31 66 56 78
B 42 45 99 67 60